package com.gmall.realtime.dws.util;

import org.wltea.analyzer.core.IKSegmenter;
import org.wltea.analyzer.core.Lexeme;

import java.io.IOException;
import java.io.Reader;
import java.io.StringReader;
import java.util.HashSet;
import java.util.Set;

public class IkUtil {

    /**
     * 使用IK分词器对字符串进行智能分词
     * @param s 待分词的字符串
     * @return 包含所有分词结果的Set集合（自动去重）
     */
    public static Set<String> split(String s) {
        // 创建存储分词结果的Set集合，利用Set特性自动去重
        Set<String> result = new HashSet<>();

        // 将输入字符串转换为Reader对象，供IK分词器使用
        Reader reader = new StringReader(s);

        // 创建IK分词器实例，true表示使用智能分词模式(max_word)
        IKSegmenter ikSegmenter = new IKSegmenter(reader, true);

        try {
            // 获取第一个分词结果
            Lexeme next = ikSegmenter.next();

            // 循环处理所有分词结果
            while (next != null) {
                // 获取当前分词的文本内容
                String word = next.getLexemeText();
                // 将分词结果添加到集合中
                result.add(word);
                // 获取下一个分词结果
                next = ikSegmenter.next();
            }

        } catch (IOException e) {
            // 将IO异常转换为运行时异常抛出
            throw new RuntimeException(e);
        }

        // 返回最终的分词结果集合
        return result;
    }

}